package LeetCode;

import java.util.HashMap;
import java.util.Map;

public class Code01_twoSum {

    /**
     * 解决两数之和问题。
     * 找到数组中两个数的下标，使得这两个数相加等于目标值。
     *
     * @param arr 输入的整数数组
     * @param target 目标值
     * @return 返回一个包含两个数下标的数组，如果不存在这样的两个数，则返回 {-1, -1}
     */
    public int[] twoSum(int[] arr, int target){
        // 使用哈希表存储遍历过的数字及其对应的下标，以便快速查找
        Map<Integer, Integer> map = new HashMap<>();

        // 遍历数组中的每个元素
        for (int i = 0; i < arr.length; i++) {
            // 计算当前数字与目标值的差值（即需要找到的另一个数字）
            int component = target - arr[i];
            // 检查哈希表中是否存在这个差值，如果存在则说明找到了两个数
            if (map.containsKey(component)){
                // 返回当前数字的下标和哈希表中对应差值的下标
                return new int[]{i, map.get(component)};
            }
            // 将当前数字及其下标存入哈希表
            map.put(arr[i], i);
        }

        // 如果没有找到符合条件的两个数，返回 {-1, -1}
        return new int[]{-1, -1};
    }


    public static void main(String[] args) {

    }
}
